// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "content/public/common/manifest_util.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "url/gurl.h"

namespace content {

TEST(ManifestUtilTest, WebDisplayModeConversions)
{
    struct ReversibleConversion {
        blink::WebDisplayMode display_mode;
        std::string lowercase_display_mode_string;
    } reversible_conversions[] = {
        { blink::WebDisplayModeUndefined, "" },
        { blink::WebDisplayModeBrowser, "browser" },
        { blink::WebDisplayModeMinimalUi, "minimal-ui" },
        { blink::WebDisplayModeStandalone, "standalone" },
        { blink::WebDisplayModeFullscreen, "fullscreen" },
    };

    for (const ReversibleConversion& conversion : reversible_conversions) {
        EXPECT_EQ(
            conversion.display_mode,
            WebDisplayModeFromString(conversion.lowercase_display_mode_string));
        EXPECT_EQ(conversion.lowercase_display_mode_string,
            WebDisplayModeToString(conversion.display_mode));
    }

    // WebDisplayModeFromString() should work with non-lowercase strings.
    EXPECT_EQ(blink::WebDisplayModeFullscreen,
        WebDisplayModeFromString("Fullscreen"));

    // WebDisplayModeFromString() should return
    // blink::WebDisplayModeUndefined if the string isn't known.
    EXPECT_EQ(blink::WebDisplayModeUndefined,
        WebDisplayModeFromString("random"));
}

TEST(ManifestUtilTest, WebScreenOrientationLockTypeConversions)
{
    struct ReversibleConversion {
        blink::WebScreenOrientationLockType orientation;
        std::string lowercase_orientation_string;
    } reversible_conversions[] = {
        { blink::WebScreenOrientationLockDefault, "" },
        { blink::WebScreenOrientationLockPortraitPrimary, "portrait-primary" },
        { blink::WebScreenOrientationLockPortraitSecondary, "portrait-secondary" },
        { blink::WebScreenOrientationLockLandscapePrimary, "landscape-primary" },
        { blink::WebScreenOrientationLockLandscapeSecondary,
            "landscape-secondary" },
        { blink::WebScreenOrientationLockAny, "any" },
        { blink::WebScreenOrientationLockLandscape, "landscape" },
        { blink::WebScreenOrientationLockPortrait, "portrait" },
        { blink::WebScreenOrientationLockNatural, "natural" },
    };

    for (const ReversibleConversion& conversion : reversible_conversions) {
        EXPECT_EQ(conversion.orientation,
            WebScreenOrientationLockTypeFromString(
                conversion.lowercase_orientation_string));
        EXPECT_EQ(conversion.lowercase_orientation_string,
            WebScreenOrientationLockTypeToString(conversion.orientation));
    }

    // WebScreenOrientationLockTypeFromString() should work with non-lowercase
    // strings.
    EXPECT_EQ(blink::WebScreenOrientationLockNatural,
        WebScreenOrientationLockTypeFromString("Natural"));

    // WebScreenOrientationLockTypeFromString() should return
    // blink::WebScreenOrientationLockDefault if the string isn't known.
    EXPECT_EQ(blink::WebScreenOrientationLockDefault,
        WebScreenOrientationLockTypeFromString("random"));
}

} // namespace content
